/**
 * 使用正确Mastra API的Agent测试
 * 基于官方文档的标准调用方式
 */

import { MastraClient } from '@mastra/client-js';

console.log('🚀 开始正确API的Agent测试...\n');

// 创建Mastra客户端
const mastraClient = new MastraClient({
  baseUrl: 'http://localhost:4111',
  retries: 3,
  backoffMs: 300,
  maxBackoffMs: 5000,
});

console.log('🔧 客户端创建完成');
console.log('- client类型:', typeof mastraClient);
console.log('- getAgent方法:', typeof mastraClient.getAgent);

async function testGameMasterAgent() {
  console.log('\n📋 测试1: 游戏主控Agent（正确API）...');
  
  try {
    console.log('   🔄 获取Agent实例...');
    const agent = mastraClient.getAgent('gameMasterAgent');
    console.log('   ✅ Agent实例获取成功');
    console.log('   - agent类型:', typeof agent);
    console.log('   - generate方法:', typeof agent.generate);

    console.log('   🔄 调用agent.generate...');
    const startTime = Date.now();
    
    const result = await agent.generate({
      messages: [
        {
          role: 'user',
          content: `请开始一个新的赛博侦探游戏。

游戏配置：
- 难度：normal
- 主题：办公室谋杀案
- 嫌疑人数量：3
- 玩家档案：{"name": "测试侦探", "experience": "中级"}

请使用 game-master 工具执行 start_game 操作，生成完整的案件信息。`
        }
      ]
    });

    const responseTime = Date.now() - startTime;
    
    console.log('   ✅ 游戏主控Agent响应成功！');
    console.log(`   ⏱️  响应时间: ${responseTime}ms`);
    console.log(`   📝 响应文本长度: ${result.text?.length || 0} 字符`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    if (result.toolCalls && result.toolCalls.length > 0) {
      const toolResult = result.toolCalls[0].result;
      console.log(`   🎯 工具调用成功: ${toolResult?.success ? '是' : '否'}`);
      if (toolResult?.success && toolResult.data) {
        console.log(`   📊 案件标题: ${toolResult.data.case?.title || '未知'}`);
        console.log(`   👥 嫌疑人数量: ${toolResult.data.suspects?.length || 0}`);
        console.log(`   🔍 初始线索数量: ${toolResult.data.discoveredClues?.length || 0}`);
      }
    }
    
    return { success: true, responseTime, result };
    
  } catch (error) {
    console.log('   ❌ 游戏主控Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    console.log(`   📝 错误堆栈: ${error.stack?.substring(0, 200)}...`);
    return { success: false, error: error.message };
  }
}

async function testSuspectDialogueAgent() {
  console.log('\n📋 测试2: 嫌疑人对话Agent（正确API）...');
  
  try {
    const agent = mastraClient.getAgent('suspectDialogueAgent');
    console.log('   ✅ Agent实例获取成功');

    const startTime = Date.now();
    const result = await agent.generate({
      messages: [
        {
          role: 'user',
          content: `请模拟嫌疑人对话。

角色信息：
- 姓名：李秘书
- 性格：谨慎内向
- 背景：工作认真的秘书
- 不在场证明：当时在整理文件
- 可疑程度：4/10
- 是否真凶：否

侦探问题："你当时在哪里？能详细说说你在案发时间的行踪吗？"

请使用 dialogue-management 工具生成自然的对话回应。`
        }
      ]
    });

    const responseTime = Date.now() - startTime;
    
    console.log('   ✅ 嫌疑人对话Agent响应成功！');
    console.log(`   ⏱️  响应时间: ${responseTime}ms`);
    console.log(`   📝 响应文本长度: ${result.text?.length || 0} 字符`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    if (result.toolCalls && result.toolCalls.length > 0) {
      const toolResult = result.toolCalls[0].result;
      console.log(`   🎯 工具调用成功: ${toolResult?.success ? '是' : '否'}`);
      if (toolResult?.success) {
        console.log(`   💬 对话回应: ${toolResult.response?.substring(0, 100)}...`);
        console.log(`   😊 情绪状态: ${toolResult.emotion || '未知'}`);
      }
    }
    
    return { success: true, responseTime, result };
    
  } catch (error) {
    console.log('   ❌ 嫌疑人对话Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    return { success: false, error: error.message };
  }
}

async function testInvestigationAgent() {
  console.log('\n📋 测试3: 调查分析Agent（正确API）...');
  
  try {
    const agent = mastraClient.getAgent('investigationAgent');
    console.log('   ✅ Agent实例获取成功');

    const startTime = Date.now();
    const result = await agent.generate({
      messages: [
        {
          role: 'user',
          content: `请分析当前的调查进度。

案件信息：
- 案件：办公室谋杀案
- 地点：办公室
- 受害者：张经理
- 案发时间：上午10:30

已发现线索：
1. 现场咖啡杯（物理证据，重要性：6/10）

对话历史：
1. 问：你当时在哪里？
   答：我当时在整理文件...

请使用 clue-analysis 工具进行深度分析并提供建议。`
        }
      ]
    });

    const responseTime = Date.now() - startTime;
    
    console.log('   ✅ 调查分析Agent响应成功！');
    console.log(`   ⏱️  响应时间: ${responseTime}ms`);
    console.log(`   📝 响应文本长度: ${result.text?.length || 0} 字符`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    if (result.toolCalls && result.toolCalls.length > 0) {
      const toolResult = result.toolCalls[0].result;
      console.log(`   🎯 工具调用成功: ${toolResult?.success ? '是' : '否'}`);
      if (toolResult?.success) {
        console.log(`   📊 分析结果: ${toolResult.analysis?.substring(0, 100)}...`);
        console.log(`   💡 建议数量: ${toolResult.suggestions?.length || 0}`);
      }
    }
    
    return { success: true, responseTime, result };
    
  } catch (error) {
    console.log('   ❌ 调查分析Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    return { success: false, error: error.message };
  }
}

async function testEvaluationAgent() {
  console.log('\n📋 测试4: 推理评估Agent（正确API）...');
  
  try {
    const agent = mastraClient.getAgent('evaluationAgent');
    console.log('   ✅ Agent实例获取成功');

    const startTime = Date.now();
    const result = await agent.generate({
      messages: [
        {
          role: 'user',
          content: `请评估推理结果。

推理信息：
- 选择的真凶：李秘书
- 推理过程：基于对话分析和线索综合判断
- 支持证据：对话内容分析、现场线索关联
- 信心程度：75%

案件信息：
- 真实真凶：李秘书
- 案件难度：normal

游戏历史：
- 发现线索数：1
- 对话轮数：1
- 用时：180秒
- 总时间：300秒

请使用 scoring 工具进行详细评估和打分。`
        }
      ]
    });

    const responseTime = Date.now() - startTime;
    
    console.log('   ✅ 推理评估Agent响应成功！');
    console.log(`   ⏱️  响应时间: ${responseTime}ms`);
    console.log(`   📝 响应文本长度: ${result.text?.length || 0} 字符`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    if (result.toolCalls && result.toolCalls.length > 0) {
      const toolResult = result.toolCalls[0].result;
      console.log(`   🎯 工具调用成功: ${toolResult?.success ? '是' : '否'}`);
      if (toolResult?.success) {
        console.log(`   📊 评估结果: 正确=${toolResult.isCorrect}, 总分=${toolResult.totalScore}`);
        console.log(`   🏆 等级: ${toolResult.grade || '未知'}`);
      }
    }
    
    return { success: true, responseTime, result };
    
  } catch (error) {
    console.log('   ❌ 推理评估Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    return { success: false, error: error.message };
  }
}

async function runCorrectAPITests() {
  console.log('🎯 开始正确API的Agent测试...\n');
  
  const results = {
    gameMaster: await testGameMasterAgent(),
    suspectDialogue: await testSuspectDialogueAgent(),
    investigation: await testInvestigationAgent(),
    evaluation: await testEvaluationAgent(),
  };

  const successCount = Object.values(results).filter(r => r?.success).length;
  const totalTests = Object.keys(results).length;

  console.log('\n' + '='.repeat(60));
  console.log('📊 正确API Agent测试报告');
  console.log('='.repeat(60));
  console.log(`🎯 成功率: ${successCount}/${totalTests} (${Math.round(successCount/totalTests*100)}%)`);
  console.log(`🤖 游戏主控Agent: ${results.gameMaster?.success ? '✅' : '❌'}`);
  console.log(`💬 嫌疑人对话Agent: ${results.suspectDialogue?.success ? '✅' : '❌'}`);
  console.log(`🔍 调查分析Agent: ${results.investigation?.success ? '✅' : '❌'}`);
  console.log(`📊 推理评估Agent: ${results.evaluation?.success ? '✅' : '❌'}`);

  if (successCount === totalTests) {
    console.log('\n🎉 所有Agent测试通过！API调用问题已完全解决！');
    console.log('✅ 正确的API调用方式已确认');
    console.log('🚀 可以修复前端代码并进行深度功能测试了！');
  } else if (successCount > 0) {
    console.log('\n👍 部分Agent正常，继续调试其他Agent');
  } else {
    console.log('\n⚠️  需要进一步调试Agent调用');
  }

  console.log('\n🔧 正确的API调用方式:');
  console.log('1. const agent = mastraClient.getAgent("agentId")');
  console.log('2. const result = await agent.generate({ messages: [...] })');
  console.log('3. 处理 result.text 和 result.toolCalls');

  console.log('\n' + '='.repeat(60));
  return results;
}

runCorrectAPITests().catch(error => {
  console.error('❌ 测试失败:', error);
  process.exit(1);
});
